<!DOCTYPE html>
<html lang="zh-Hans">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 4.2.1">
  <link rel="apple-touch-icon" sizes="180x180" href="/assets/img/favicon.ico">
  <link rel="icon" type="image/png" sizes="32x32" href="/assets/img/favicon.ico">
  <link rel="icon" type="image/png" sizes="16x16" href="/assets/img/favicon.ico">
  <link rel="mask-icon" href="/assets/img/favicon.ico" color="#222">
  <meta http-equiv="Cache-Control" content="no-transform">
  <meta http-equiv="Cache-Control" content="no-siteapp">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">
  <link rel="stylesheet" href="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.css">
  <link rel="stylesheet" href="/lib/pace/pace-theme-bounce.min.css">
  <script src="/lib/pace/pace.min.js"></script>

<script id="hexo-configurations">
    var NexT = window.NexT || {};
    var CONFIG = {"hostname":"lzqblog.top","root":"/","scheme":"Mist","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"always","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":true,"show_result":true,"style":"default"},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":true,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},"path":"search.xml"};
  </script>

  <meta name="description" content="This post will tell you how to create your own general layer with a “hello world” app to be built into your EVK.">
<meta property="og:type" content="article">
<meta property="og:title" content="i.MX 8 getting started: create your general layer">
<meta property="og:url" content="https://lzqblog.top/2019-03-22/i-MX-8-getting-started-create-your-general-layer/index.html">
<meta property="og:site_name" content="Coding Spirit">
<meta property="og:description" content="This post will tell you how to create your own general layer with a “hello world” app to be built into your EVK.">
<meta property="og:image" content="https://lzqblog.top/2019-03-22/i-MX-8-getting-started-create-your-general-layer/folder_tree.png">
<meta property="article:published_time" content="2019-03-22T12:21:37.000Z">
<meta property="article:modified_time" content="2020-03-01T01:44:38.727Z">
<meta property="article:author" content="Coding Spirit">
<meta property="article:tag" content="Linux">
<meta property="article:tag" content="Yocto">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://lzqblog.top/2019-03-22/i-MX-8-getting-started-create-your-general-layer/folder_tree.png">

<link rel="canonical" href="https://lzqblog.top/2019-03-22/i-MX-8-getting-started-create-your-general-layer/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome : false,
    isPost : true,
    lang   : 'zh-Hans'
  };
</script>

  <title>i.MX 8 getting started: create your general layer | Coding Spirit</title>
  
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-154617667-1"></script>
    <script>
      if (CONFIG.hostname === location.hostname) {
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
        gtag('config', 'UA-154617667-1');
      }
    </script>






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="Toggle navigation bar">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <h1 class="site-title">Coding Spirit</h1>
      <span class="logo-line-after"><i></i></span>
    </a>
      <p class="site-subtitle" itemprop="description">一位程序员，比较帅的那种</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>




<nav class="site-nav">
  <ul id="menu" class="main-menu menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-home fa-fw"></i>Home</a>

  </li>
        <li class="menu-item menu-item-tags">

    <a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>Tags</a>

  </li>
        <li class="menu-item menu-item-categories">

    <a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>Categories</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>Archives</a>

  </li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>Search
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup">
        <div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off"
           placeholder="Searching..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div id="search-result">
  <div id="no-result">
    <i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>
  </div>
</div>

    </div>
  </div>

</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>
  <div class="reading-progress-bar"></div>

  <a href="https://github.com/codingspirit" class="github-corner" title="Follow me on GitHub" aria-label="Follow me on GitHub" rel="noopener" target="_blank"><svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content post posts-expand">
            

    
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-Hans">
    <link itemprop="mainEntityOfPage" href="https://lzqblog.top/2019-03-22/i-MX-8-getting-started-create-your-general-layer/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/assets/img/coding_spirit.jpg">
      <meta itemprop="name" content="Coding Spirit">
      <meta itemprop="description" content="毕业于OUC，现就职于Amazon">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Coding Spirit">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          i.MX 8 getting started: create your general layer
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-calendar"></i>
              </span>
              <span class="post-meta-item-text">Posted on</span>

              <time title="Created: 2019-03-22 20:21:37" itemprop="dateCreated datePublished" datetime="2019-03-22T20:21:37+08:00">2019-03-22</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="far fa-calendar-check"></i>
                </span>
                <span class="post-meta-item-text">Edited on</span>
                <time title="Modified: 2020-03-01 09:44:38" itemprop="dateModified" datetime="2020-03-01T09:44:38+08:00">2020-03-01</time>
              </span>
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="far fa-folder"></i>
              </span>
              <span class="post-meta-item-text">In</span>
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
                  <a href="/categories/%E7%B3%BB%E7%BB%9F%E6%9E%84%E5%BB%BA/" itemprop="url" rel="index"><span itemprop="name">系统构建</span></a>
                </span>
            </span>

          
            <span class="post-meta-item" title="Views" id="busuanzi_container_page_pv" style="display: none;">
              <span class="post-meta-item-icon">
                <i class="fa fa-eye"></i>
              </span>
              <span class="post-meta-item-text">Views: </span>
              <span id="busuanzi_value_page_pv"></span>
            </span><br>
            <span class="post-meta-item" title="Symbols count in article">
              <span class="post-meta-item-icon">
                <i class="far fa-file-word"></i>
              </span>
                <span class="post-meta-item-text">Symbols count in article: </span>
              <span>4k</span>
            </span>
            <span class="post-meta-item" title="Reading time">
              <span class="post-meta-item-icon">
                <i class="far fa-clock"></i>
              </span>
                <span class="post-meta-item-text">Reading time &asymp;</span>
              <span>4 mins.</span>
            </span>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <p>This post will tell you how to create your own general layer with a “hello world” app to be built into your EVK.</p>
<a id="more"></a>
<p>Before start, you should run <strong>setup-environment</strong> first.</p>
<h2 id="Create-your-layer"><a href="#Create-your-layer" class="headerlink" title="Create your layer"></a>Create your layer</h2><h3 id="Create-layer-example-by-bitbake-layers"><a href="#Create-layer-example-by-bitbake-layers" class="headerlink" title="Create layer example by bitbake-layers"></a>Create layer example by bitbake-layers</h3><p>Use <strong>bitbake-layers create-layer &lt;layer name&gt;</strong> to create a general layer example.</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">cd</span> imx-yocto-bsp/<span class="built_in">source</span> <span class="comment"># you also can create your layer in other path</span></span><br><span class="line">$ bitbake-layers create-layer meta-alexlayer</span><br></pre></td></tr></table></figure>

<p>Notice: <strong>yocto-layer</strong> has been deprecated after Yocto 2.5. See <a href="https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#detailed-supported-distros" target="_blank" rel="noopener">yocto ref manual</a> for more details.</p>
<blockquote>
<p>The yocto-bsp, yocto-kernel, and yocto-layer scripts previously shipped with poky but not in OpenEmbedded-Core have been removed. These scripts are not maintained and are outdated. In many cases, they are also limited in scope. The bitbake-layers create-layer command is a direct replacement for yocto-layer</p>
</blockquote>
<p>It will help you to create a layer with priority of 6. To change to other priority, add option “‐‐priority” or edit <strong>BBFILE_PRIORITY</strong> after creation.</p>
<h3 id="Modification"><a href="#Modification" class="headerlink" title="Modification"></a>Modification</h3><p>Go to your layer path, add some stuff into your <em>conf/layer.conf</em>:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">IMAGE_INSTALL_append +&#x3D; &quot;example&quot;</span><br><span class="line">LAYERSERIES_COMPAT_meta-alexlayer &#x3D; &quot;sumo&quot;</span><br></pre></td></tr></table></figure>

<p>IMAGE_INSTALL_append will tell bitbake to install your app into image.<br>Notice: It’s required by Yocto Project Compatible version 2 standard to set <strong>LAYERSERIES_COMPAT</strong>. There will be a warning if you didn’t do so. see <a href="https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html" target="_blank" rel="noopener">yocto ref manual</a> for more details.</p>
<blockquote>
<p>Note</p>
<p>Setting LAYERSERIES_COMPAT is required by the Yocto Project Compatible version 2 standard. The OpenEmbedded build system produces a warning if the variable is not set for any given layer.</p>
</blockquote>
<p>Then add your source code:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ <span class="built_in">cd</span> meta-alexlayer/recipes-example/example</span><br><span class="line">$ mkdir example-0.1</span><br><span class="line">$ <span class="built_in">cd</span> example-0.1</span><br><span class="line">$ touch alexhello.cpp</span><br></pre></td></tr></table></figure>
<p>my example here :</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// alexhello.cpp</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    <span class="built_in">std</span>::<span class="built_in">cout</span> &lt;&lt; <span class="string">"hello world from alexlayer"</span> &lt;&lt; <span class="built_in">std</span>::<span class="built_in">endl</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>Then modify your recipe file <strong>example_0.1.bb</strong>:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">SUMMARY &#x3D; &quot;bitbake-layers recipe&quot;</span><br><span class="line">DESCRIPTION &#x3D; &quot;Recipe created by bitbake-layers&quot;</span><br><span class="line">LICENSE &#x3D; &quot;MIT&quot;</span><br><span class="line">LIC_FILES_CHKSUM &#x3D; &quot;file:&#x2F;&#x2F;$&#123;COMMON_LICENSE_DIR&#125;&#x2F;MIT;md5&#x3D;0835ade698e0bcf8506ecda2f7b4f302&quot;</span><br><span class="line"></span><br><span class="line">TARGET_CC_ARCH +&#x3D; &quot;$&#123;LDFLAGS&#125;&quot;</span><br><span class="line"></span><br><span class="line">SRC_URI &#x3D; &quot;file:&#x2F;&#x2F;alexhello.cpp&quot;</span><br><span class="line"></span><br><span class="line">S &#x3D; &quot;$&#123;WORKDIR&#125;&quot;</span><br><span class="line"></span><br><span class="line">do_compile() &#123;</span><br><span class="line">    $&#123;CXX&#125; alexhello.cpp -o alexhello</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">do_install() &#123;</span><br><span class="line">    install -d $&#123;D&#125;$&#123;bindir&#125;</span><br><span class="line">    install -m 0755 alexhello $&#123;D&#125;$&#123;bindir&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">python do_build() &#123;</span><br><span class="line">    bb.plain(&quot;***********************************************&quot;);</span><br><span class="line">    bb.plain(&quot;*                                             *&quot;);</span><br><span class="line">    bb.plain(&quot;*  Example recipe created by bitbake-layers   *&quot;);</span><br><span class="line">    bb.plain(&quot;*                                             *&quot;);</span><br><span class="line">    bb.plain(&quot;***********************************************&quot;);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>Notice: Here we use <span style="color:red"><strong>TARGET_CC_ARCH += “${LDFLAGS}”</strong></span> to avoid <strong>“No GNU_HASH in the elf binary”</strong> error when QA check, see <a href="https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html" target="_blank" rel="noopener">mega-manual</a> for more details.</p>
<blockquote>
<p>25.10.8. Default Linker Hash Style Changed</p>
<p>The default linker hash style for gcc-cross is now “sysv” in order to catch recipes that are building software without using the OpenEmbedded LDFLAGS. This change could result in seeing some “No GNU_HASH in the elf binary” QA issues when building such recipes. You need to fix these recipes so that they use the expected LDFLAGS. Depending on how the software is built, the build system used by the software (e.g. a Makefile) might need to be patched. However, sometimes making this fix is as simple as adding the following to the recipe:</p>
<pre><code>TARGET_CC_ARCH += &quot;${LDFLAGS}&quot;</code></pre></blockquote>
<p>After those steps, you should have a folder like this:<br><img src="/2019-03-22/i-MX-8-getting-started-create-your-general-layer/folder_tree.png" alt></p>
<h2 id="Add-your-layer-and-build"><a href="#Add-your-layer-and-build" class="headerlink" title="Add your layer and build"></a>Add your layer and build</h2><p>There are two ways to add your layer into build:</p>
<h3 id="Use-bitbake-layers-add-layer"><a href="#Use-bitbake-layers-add-layer" class="headerlink" title="Use bitbake-layers add-layer"></a>Use <strong>bitbake-layers add-layer</strong></h3><p>Use <strong>bitbake-layers add-layer &lt;layer name&gt;</strong> to add a layer and build it. Before this, you should source <strong>setup-environment</strong>.</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ bitbake-layers add-layer meta-alexlayer</span><br><span class="line">$ bitbake example</span><br></pre></td></tr></table></figure>

<h3 id="Modify-script-provided-by-nxp"><a href="#Modify-script-provided-by-nxp" class="headerlink" title="Modify script provided by nxp"></a>Modify script provided by nxp</h3><p>Modify <strong>fsl-setup-release.sh</strong>, add your layer path to “BBLAYERS”:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">"BBLAYERS += \" \$&#123;BSPDIR&#125;/sources/meta-qt5 \""</span> &gt;&gt; <span class="variable">$BUILD_DIR</span>/conf/bblayers.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">"BBLAYERS += \" \$&#123;BSPDIR&#125;/sources/meta-alexlayer \""</span> &gt;&gt; <span class="variable">$BUILD_DIR</span>/conf/bblayers.conf <span class="comment"># new layer</span></span><br></pre></td></tr></table></figure>
<p>Then source it and <strong>bitbake</strong> your new layer:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ DISTRO=fsl-imx-xwayland MACHINE=imx8mmevk <span class="built_in">source</span> fsl-setup-release.sh -b build-xwayland</span><br><span class="line">$ bitbake example</span><br></pre></td></tr></table></figure>

<h2 id="Rebuild-your-image-file"><a href="#Rebuild-your-image-file" class="headerlink" title="Rebuild your image file"></a>Rebuild your image file</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ bitbake fsl-image-qt5-validation-imx</span><br></pre></td></tr></table></figure>

    </div>

    
    
    
        

<div>
<ul class="post-copyright">
  <li class="post-copyright-author">
    <strong>Post author:  </strong>Coding Spirit
  </li>
  <li class="post-copyright-link">
    <strong>Post link: </strong>
    <a href="https://lzqblog.top/2019-03-22/i-MX-8-getting-started-create-your-general-layer/" title="i.MX 8 getting started: create your general layer">https://lzqblog.top/2019-03-22/i-MX-8-getting-started-create-your-general-layer/</a>
  </li>
  <li class="post-copyright-license">
    <strong>Copyright Notice:  </strong>All articles in this blog are licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" rel="noopener" target="_blank"><i class="fab fa-fw fa-creative-commons"></i>BY-NC-SA</a> unless stating additionally.
  </li>
</ul>
</div>


      <footer class="post-footer">
          
          <div class="post-tags">
              <a href="/tags/Linux/" rel="tag"><i class="fa fa-tag"></i> Linux</a>
              <a href="/tags/Yocto/" rel="tag"><i class="fa fa-tag"></i> Yocto</a>
          </div>

        


        
    <div class="post-nav">
      <div class="post-nav-item">
    <a href="/2019-03-21/i-MX-8-getting-started-setup-environment/" rel="prev" title="i.MX 8 getting started: setup environment">
      <i class="fa fa-chevron-left"></i> i.MX 8 getting started: setup environment
    </a></div>
      <div class="post-nav-item">
    <a href="/2019-03-26/i-MX-8-getting-started-create-your-kernel-module/" rel="next" title="i.MX 8 getting started: create your kernel module">
      i.MX 8 getting started: create your kernel module <i class="fa fa-chevron-right"></i>
    </a></div>
    </div>
      </footer>
    
  </article>
  
  
  



          </div>
          
    <div class="comments" id="gitalk-container"></div>

<script>
  window.addEventListener('tabs:register', () => {
    let { activeClass } = CONFIG.comments;
    if (CONFIG.comments.storage) {
      activeClass = localStorage.getItem('comments_active') || activeClass;
    }
    if (activeClass) {
      let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
      if (activeTab) {
        activeTab.click();
      }
    }
  });
  if (CONFIG.comments.storage) {
    window.addEventListener('tabs:click', event => {
      if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
      let commentClass = event.target.classList[1];
      localStorage.setItem('comments_active', commentClass);
    });
  }
</script>

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          Table of Contents
        </li>
        <li class="sidebar-nav-overview">
          Overview
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#Create-your-layer"><span class="nav-number">1.</span> <span class="nav-text">Create your layer</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#Create-layer-example-by-bitbake-layers"><span class="nav-number">1.1.</span> <span class="nav-text">Create layer example by bitbake-layers</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Modification"><span class="nav-number">1.2.</span> <span class="nav-text">Modification</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Add-your-layer-and-build"><span class="nav-number">2.</span> <span class="nav-text">Add your layer and build</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#Use-bitbake-layers-add-layer"><span class="nav-number">2.1.</span> <span class="nav-text">Use bitbake-layers add-layer</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Modify-script-provided-by-nxp"><span class="nav-number">2.2.</span> <span class="nav-text">Modify script provided by nxp</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#Rebuild-your-image-file"><span class="nav-number">3.</span> <span class="nav-text">Rebuild your image file</span></a></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="Coding Spirit"
      src="/assets/img/coding_spirit.jpg">
  <p class="site-author-name" itemprop="name">Coding Spirit</p>
  <div class="site-description" itemprop="description">毕业于OUC，现就职于Amazon</div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">113</span>
          <span class="site-state-item-name">posts</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
            <a href="/categories/">
          
        <span class="site-state-item-count">10</span>
        <span class="site-state-item-name">categories</span></a>
      </div>
      <div class="site-state-item site-state-tags">
            <a href="/tags/">
          
        <span class="site-state-item-count">39</span>
        <span class="site-state-item-name">tags</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author motion-element">
      <span class="links-of-author-item">
        <a href="https://github.com/codingspirit" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;codingspirit" rel="noopener" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="mailto:596544399@qq.com" title="E-Mail → mailto:596544399@qq.com" rel="noopener" target="_blank"><i class="fa fa-envelope fa-fw"></i>E-Mail</a>
      </span>
  </div>



      </div>

      
        
          <div id="musicPlayerPost">
            <iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=400876433&auto=0&height=66"></iframe>
          </div>
        
      
      

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2021</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">Powered by Coding Spirit. All rights reserved.</span>
    <span class="post-meta-divider">|</span>
    <span class="post-meta-item-icon">
      <i class="fa fa-chart-area"></i>
    </span>
    <span title="Symbols count total">220k</span>
    <span class="post-meta-divider">|</span>
    <span class="post-meta-item-icon">
      <i class="fa fa-coffee"></i>
    </span>
    <span title="Reading time total">3:20</span>
</div>

        
<div class="busuanzi-count">
  <script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
    <span class="post-meta-item" id="busuanzi_container_site_uv" style="display: none;">
      <span class="post-meta-item-icon">
        <i class="fa fa-user"></i>
      </span>
      <span class="site-uv" title="Total Visitors">
        <span id="busuanzi_value_site_uv"></span>
      </span>
    </span>
    <span class="post-meta-divider">|</span>
    <span class="post-meta-item" id="busuanzi_container_site_pv" style="display: none;">
      <span class="post-meta-item-icon">
        <i class="fa fa-eye"></i>
      </span>
      <span class="site-pv" title="Total Views">
        <span id="busuanzi_value_site_pv"></span>
      </span>
    </span>
</div>








      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
  <script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>

<script src="/js/utils.js"></script>

<script src="/js/motion.js"></script>


<script src="/js/schemes/muse.js"></script>


<script src="/js/next-boot.js"></script>




  
  <script>
    (function(){
      var canonicalURL, curProtocol;
      //Get the <link> tag
      var x=document.getElementsByTagName("link");
		//Find the last canonical URL
		if(x.length > 0){
			for (i=0;i<x.length;i++){
				if(x[i].rel.toLowerCase() == 'canonical' && x[i].href){
					canonicalURL=x[i].href;
				}
			}
		}
    //Get protocol
	    if (!canonicalURL){
	    	curProtocol = window.location.protocol.split(':')[0];
	    }
	    else{
	    	curProtocol = canonicalURL.split(':')[0];
	    }
      //Get current URL if the canonical URL does not exist
	    if (!canonicalURL) canonicalURL = window.location.href;
	    //Assign script content. Replace current URL with the canonical URL
      !function(){var e=/([http|https]:\/\/[a-zA-Z0-9\_\.]+\.baidu\.com)/gi,r=canonicalURL,t=document.referrer;if(!e.test(r)){var n=(String(curProtocol).toLowerCase() === 'https')?"https://sp0.baidu.com/9_Q4simg2RQJ8t7jm9iCKT-xh_/s.gif":"//api.share.baidu.com/s.gif";t?(n+="?r="+encodeURIComponent(document.referrer),r&&(n+="&l="+r)):r&&(n+="?l="+r);var i=new Image;i.src=n}}(window);})();
  </script>




  
<script src="/js/local-search.js"></script>













  

  

<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.css">

<script>
NexT.utils.loadComments(document.querySelector('#gitalk-container'), () => {
  NexT.utils.getScript('//cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js', () => {
    var gitalk = new Gitalk({
      clientID    : '965ca656ae3d59a50b73',
      clientSecret: '94dbe9c760ce8b778c84481a7fe2f37f548d7375',
      repo        : 'blog-gitalk',
      owner       : 'codingspirit',
      admin       : ['codingspirit'],
      id          : '2947b56c95f58ccb7d0ec28b90cc66f8',
        language: '',
      distractionFreeMode: true
    });
    gitalk.render('gitalk-container');
  }, window.Gitalk);
});
</script>

</body>
  
    <canvas class="fireworks" style="position: fixed;left: 0;top: 0;z-index: 1; pointer-events: none;" ></canvas>
    <script type="text/javascript" src="//cdn.bootcss.com/animejs/2.2.0/anime.min.js"></script>
    <script type="text/javascript" src="/js/src/fireworks.js"></script>
  
</html>
